package mx.itesm.escenas;

import mx.itesm.constants.ConstantesEscenas;
import mx.itesm.manejadores.ManejadorRecursos;
import mx.itesm.ninja.GameActivity;

import org.andengine.engine.Engine;
import org.andengine.engine.camera.Camera;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.sprite.Sprite;
import org.andengine.opengl.texture.region.ITextureRegion;
import org.andengine.opengl.util.GLState;
import org.andengine.opengl.vbo.VertexBufferObjectManager;


public abstract class EscenaBase extends Scene {

	/*
	 * **************************************************************
	 *                                         Variables
	 * **************************************************************
	 */
	
	// Las variables deben ser visibles, pero con uso restringido
	protected Engine engine;
	protected GameActivity gActivity;
	protected Camera camara;
	protected VertexBufferObjectManager mVerticesObjetos;
	protected ManejadorRecursos manejadorRecursos;
	
	private static final int CENTRO_X = ConstantesEscenas.CENTRO_X;
	private static final int CENTRO_Y = ConstantesEscenas.CENTRO_Y;
	private static final int ANCHO_PANTALLA = ConstantesEscenas.ANCHO_PANTALLA;
	private static final int ALTO_PANTALLA = ConstantesEscenas.ALTO_PANTALLA;
	
	
	/*
	 * **************************************************************
	 *                      Metodos de la clase "EscenaBase"
	 * **************************************************************
	 */
	
	//Constructor de Escena
	public EscenaBase() {
		this.manejadorRecursos = ManejadorRecursos.getInstance();
		this.engine = manejadorRecursos.engine;
		this.gActivity = manejadorRecursos.gActivity;
		this.camara = manejadorRecursos.camara;
		this.mVerticesObjetos = manejadorRecursos.mVerticesObjetos;
		crearEscena();
	}
	
	//Creador basico del Sprite
	protected Sprite createSprite(float x, float y, ITextureRegion region, VertexBufferObjectManager vbom){
    	Sprite sprite = new Sprite(x, y, region, vbom){
    		
    		@Override
    		protected void preDraw(GLState glState, Camera camara){
    			super.preDraw(glState, camara);
    			glState.enableDither();
    		}
    	};
    	
    	sprite.setPosition(CENTRO_X, CENTRO_Y);
    	sprite.setHeight(ALTO_PANTALLA);
		sprite.setWidth(ANCHO_PANTALLA);
    	return sprite;
    }

	// Metodos basicos para las Escenas
	public abstract void crearEscena();
	public abstract TipoEscena getTipoEscena();
	public abstract void removerEscena();
	public abstract void onBackKeyPressed();
}
